26b.ピポットテ−ブル
ピポットテ−ブルは自動記録で作成でき、特にノウハウ的ものは必要ありません。しかしマクロの
内容を理解していると変更等が容易に出来ます。

26b−1 ピポットテ−ブルの作成
・Excel95とExcel2000ではマクロの内容が異なります。(95で作成→2000で実行OK、
97/2000で作成→95で実行不可)
・別シ−トへピポットテ−ブルを作成する場合は「TableDestination:=""」にする。
'[1] Excel2000
Sub Macro1()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C1:R27C4").CreatePivotTable TableDestination:=Range("G2"), _
TableName:="ピボットテーブル1"
ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量")
.Orientation = xlDataField
.Position = 1
End With
Application.CommandBars("PivotTable").Visible = False
End Sub
'[2] Excel95
Sub Record1()
Range("A2").Select
ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C1:R27C4", TableDestination:=Range("G2"), TableName:= _
"ピボットテーブル1"
ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="日付", _
ColumnFields:="製品"
ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量").Orientation _
= xlDataField
End Sub
26b−2 ピポットグラフをテ−ブルと同一シ−トへ表示
Excel2000ではピポットグラフを表示できるようになりました。通常ピホットテ−ブル上で
右クリックでショウトカットメニュ−の「ピポットグラフ」をクリックすればグラフは
「Graphシ−ト」に作成される。下記マクロ(作成)は表示場所をピホットテ−ブルと同じ場所
に表示し、マクロ(消去)でグラフを消去します。

Sub 作成()
Charts.Add
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("g3")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
Range("F1").Select
ActiveSheet.ChartObjects.Select
chmane = Selection.Name
ActiveSheet.ChartObjects(chmane).Activate
ActiveChart.ChartArea.Select
ActiveSheet.Shapes(chmane).ScaleHeight 1.44, msoFalse, msoScaleFromTopLeft
End Sub
'消去
Sub 消去()
shc = ActiveSheet.ChartObjects.Count
If shc = 1 Then
ActiveSheet.ChartObjects.Select
Selection.Delete
Else
If shc > 1 Then
MsgBox "図形が" & shc & "個あります手で消去してください"
End If
End If
End Sub
26b−3 ピポットグラフの種類変更
ピポットグラフは下記のようにグラフの種類を指定するだけで
容易に変更できます。(下記例はシ−トにグラフが1個が前提)
Sub Macro2()
'
ActiveSheet.ChartObjects.Select
'
ActiveChart.ChartType = xl3DPie
ActiveWindow.Visible = False
Windows("ピポット.xls").Activate
Range("G1").Select
End Sub
Sub Macro3()
'
ActiveSheet.ChartObjects.Select
'
ActiveChart.ChartType = xlAreaStacked
ActiveWindow.Visible = False
Windows("ピポット.xls").Activate
Range("G1").Select
End Sub
26b−4 フィ−ドの入れ替え
行フィ−ルドと列フィ−ルドの入れ替えはピポットテ−ブル上で、
そのアイテムをドラッグするだけで簡単にできますが、よく入れ替え
て見る場合は下記例のようにアイテム名を変数に入れればマクロで
一瞬に入れ替えてみることが出来ます。
Dim aa As String
Dim bb As String
Sub Macro1a()
Range("G1:K7").Select
Selection.ClearContents
aa = "日付"
bb = "製品"
Macro1c
End Sub
Sub Macro1b()
Range("G1:K7").Select
Selection.ClearContents
bb = "日付"
aa = "製品"
Macro1c
End Sub
Sub Macro1c()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C1:R27C4").CreatePivotTable TableDestination:=Range("G2"), _
TableName:="ピボットテーブル1"
ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields(aa)
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields(bb)
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量")
.Orientation = xlDataField
.Position = 1
End With
Application.CommandBars("PivotTable").Visible = False
Range("F1").Select
End Sub
26b− 5 デ−タ範囲の指定
ピポットテ−ブル化するデ−タ範囲は"SourceData:="で指定できるが、
Excel95ではRangeオブジェクトで指定したが、97/2000ではセルの参照範囲
を文字列として指定します。
Dim Myrang As String
Sub ki153a()
Myrang = "A1:D30"
ki153
End Sub
Sub ki153b()
Myrang = "A1:D20"
ki153
End Sub
Sub ki153c()
Myrang = "A1:D10"
ki153
End Sub
Sub ki153()
Sheets("Sheet1").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Myrang).CreatePivotTable TableDestination:=Range("G2"), _
TableName:="ピボットテーブル1"
ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("製品")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数量")
.Orientation = xlDataField
.Position = 1
End With
Application.CommandBars("PivotTable").Visible = False
End Sub
目次へ戻る